// stores/auth.js
import { defineStore } from 'pinia';

//  获取storage 功能

import { storage, storageExpire } from '@/utils/storage/index.js';

/**
 * 使用Pinia创建的认证管理Store。
 * 负责存储和管理用户的认证令牌(token)，提供检查认证状态、设置和移除token的方法。
 */
export const useAuthStore = defineStore('auth', {
  // State定义了store中的数据属性
  state: () => ({
    // 初始化token为空(null)，表示用户初始未认证状态
    token: storage.get('token') || null
  }),

  // Getters用于计算State中的数据，可用于简化组件中的数据获取逻辑
  getters: {
    // 判断用户是否已认证，通过检查token是否存在来确定
    isAuthenticated: (state) => !!state.token,
  },
  // Actions包含可改变State的方法，用于执行业务逻辑
  actions: {
    /**
     * 设置token。
     * 
     * @param {string} newToken - 新的认证token，应从服务器获取。
     * 
     * 此方法不仅更新store中的token，还可以扩展以存储token至客户端存储（如localStorage），
     * 以便在页面刷新时保持用户认证状态。
     */
    setToken(newToken) {
      this.token = newToken;
      // 可以在这里添加额外的逻辑，比如将token存入cookie或localStorage
	  storage.set('token', newToken);
	},

    /**
     * 移除token，执行登出操作。
     * 
     * 将store中的token重置为null，并可选择性地从客户端存储中移除token，
     * 以确保用户被完全登出。
     */
    removeToken() {
      this.token = null;
      // 同样，可以清理cookie或localStorage中的token
		
	  storage.remove('token');
	},
  },
});